#include <iostream>  
#include <vector>  
#include <stdexcept>  
template <typename T>  
class List {  
private:  
    std::vector<T> elements;  
public:  
    // 入列操作：在列表末尾添加元素  
    void enqueue(const T& item) {  
        elements.push_back(item);  
    }  
    // 出列操作：移除并返回列表的第一个元素  
    T dequeue() {  
        if (elements.empty()) {  
            throw std::out_of_range("List is empty, cannot dequeue.");  
        }  
        T front = elements.front();  
        elements.erase(elements.begin());  
        return front;  
    }  
    // 获取列表的第一个元素（不移除）  
    T& front() {  
        if (elements.empty()) {  
            throw std::out_of_range("List is empty, cannot access front.");  
        }  
        return elements.front();  
    }  
    // 获取列表的第一个元素的常量引用（不移除）  
    const T& front() const {  
        if (elements.empty()) {  
            throw std::out_of_range("List is empty, cannot access front.");  
        }  
        return elements.front();  
    }  
    // 检查列表是否为空  
    bool isEmpty() const {  
        return elements.empty();  
    }  
    // 获取列表的大小  
    size_t size() const {  
        return elements.size();  
    }  
    // 打印列表中的所有元素（用于调试）  
    void printList() const {  
        for (const auto& elem : elements) {  
            std::cout << elem << " ";  
        }  
        std::cout << std::endl;  
    }  
};  
int main() {  
    List<int> myList;  
    // 入列一些元素  
    myList.enqueue(10);  
    myList.enqueue(20);  
    myList.enqueue(30);  
    // 打印列表  
    std::cout << "List after enqueuing: ";  
    myList.printList();  
    // 出列元素并打印  
    std::cout << "Dequeued: " << myList.dequeue() << std::endl;  
    std::cout << "List after dequeuing: ";  
    myList.printList();  
    // 访问列表的第一个元素  
    try {  
        std::cout << "Front element: " << myList.front() << std::endl;  
    } catch (const std::out_of_range& e) {  
        std::cerr << e.what() << std::endl;  
    }  
    // 检查列表是否为空  
    std::cout << "Is list empty? " << (myList.isEmpty() ? "Yes" : "No") << std::endl;  
    // 获取列表的大小  
    std::cout << "List size: " << myList.size() << std::endl;  
    return 0;  
}